PARSER

Section: Miscellaneous Library Functions (3X)
Updated: August 21, 1990
Index Return to Main Contents
 

NAME

parser - top down parser with backtrack and semantic binding  

SYNOPSIS

#include parser.f83

parser  

DESCRIPTION

Top down parser with backtrack and semantic attributed grammar. Translates string using a grammar to a sequence of semantic actions in forth.
variable >break ( -- addr)
Pointer to scanner break function. The default function is the parser break function "break-on-special". The parser also supports the forth entry break function "break-on-white-space".
variable >buffer ( -- addr)
Current buffer position during parsing. Pointer into the "buffer".
variable >skip ( -- addr)
Pointer to scanner skip function. The default function is the parser skip function "skip-white-space".
: bind ( addr -- )
Appends the given parameter as a literal value to the list of semantics. Should be used by "primary" functions to bind scanned data such as numbers, strings, and identifiers.
: break-on-special ( addr -- bool)
Default break character function for scan. Returns "true" if the current character is a break character. The default function will return "false" if the character is a letter or a digit else true.
: break-on-white-space ( addr -- bool)
Alternative break character function for scan used by entry to scan for forth words. Returns "true" if the current character in the input buffer is a white space (less or equal to a space character). Used by the parser primary "entry".
variable buffer ( -- addr)
Parser scanner buffer pointer. May be assigned to an application buffer to parse.
symbol empty ( -- symbol)
Symbol for basic primary function; <empty>. Basic primary function which always returns "true".
: end.syntax ( -- ) immediate compilation
Marks the end of a syntax rule definition.
: end.primary ( -- ) immediate compilation
Marks the end of a primary function.
symbol entry ( -- symbol)
Symbol for basic primary function; <entry>. Basic primary function which returns "true" is the next token is an entry in the current vocabulary search path. The next token may have a vocabulary prefix. In this case the token is located in the given vocabulary. The entry pointer is appended as a literal to the list of semantics.
symbol eoln ( -- symbol)
Symbol for basic primary function; <eoln>. Basic primary function which returns "true" when no more tokens exist in the parser buffer.
symbol identifier ( -- symbol)
Symbol for basic primary function; <identifier>. Basic primary function which returns "true" if the next token is an identifier. The string address and length are appended as literals to the list of semantics.
: interact ( symbol -- )
Interaction top loop using the parameter symbol as parse goal. The top loop will perform the following operation; read line from input stream, parse the line with the given goal syntax, and if a parse is possible execute the semantic actions. The top loop is repeated until the token "forth" is given.
symbol number ( -- symbol)
Symbol for basic primary function; <number>. Basic primary function which returns "true" if the next token is a number. The value of the number is appended as a literal to the list of semantics.
: no-semantic ( -- true)
Parser virtual machine instruction for the end of a rule with no semantic function. Will always return "true" and exit the current rule.
: non-terminal ( symbol -- [] or [false])
Parser virtual machine instruction for parsing a non-terminal symbol. Will continue the execution of the rule if "true" else return to the syntax function.
parser ( -- )
The Top Down Parser Virtual Machine definitions vocabulary. Include into the vocabulary search set, "context", to allow access to this library.
: parse ( symbol -- [semantics] or [false])
Given a symbol reference, parses the current buffer contents and if parsed the generated list of semantics is returned else false. The list of semantics is a block of code and may be executed with the block function call.
: parse" ( symbol -- ) execution
Used in the following form:
<symbol> parse" <parse string> "
to give a string to parse. The string is parsed with the given goal syntax symbol and if parsed the semantics actions are called else an error message is given and an abort is performed.
: primary ( symbol -- )
Used in the following form:
<symbol> primary ( -- bool) ... <definition> ... end.primary
to define a primary function. These are used by the parser when a syntax definition is missing or fails to continue the parse process. The primary function should scan the buffer at the current position and signal to the parser if the next token is accepted or not. The function should return true when accepting the next token and false when rejecting it. The word "bind" should be used to capture data and pass it to the semantic actions.
: scan ( -- addr n)
Token scanning function. Returns address to token in buffer and length of token. If the buffer contains no more characters a zero length is returned.
: semantic ( -- true)
Parser virtual machine instruction for appending the succeeding function to the list of semantics. Will always return "true" and exit the current rule.
: semantic, ( addr -- )
Appends the given semantic action function to the list of semantics.
: skip-white-space ( addr1 -- addr2)
Default skip character function of scanner. Skips all characters until a character which is greater than blank or null. The parameter is the current position in the scanner buffer. The return value is address to the first non-skip character or a null character.
struct.type symbol ( -- )
Structure definition of a parser symbol. Used in the following form:
symbol <name> ( -- symbol)
to create a symbol which may occur in syntax and primary definitions.
: syntax ( symbol -- )
Used in the following form:
<symbol> syntax ... <parser virtual machine definition> ... end.syntax
to generate a grammar rule. The definition should contain the parser virtual machine definitions; "terminal", "non-terminal", "zero-or-one", "zero-or-more", and ended with one of the following; "semantic", and "no-semantic". Each of these functions takes a symbol as a parameter.
: terminal ( symbol -- [] or [false])
Parser virtual machine instruction for matching a terminal symbol. Will continue the execution of the rule if "true" else return to the syntax function.
: zero-or-more ( symbol -- )
Parser virtual machine instruction for parsing a non-terminal symbol zero or more times. Will always continue the execution of the rule.
: zero-or-one ( symbol -- )
Parser virtual machine instruction for parsing a non-terminal symbol zero or one time. Will always continue the execution of the rule.
 

INTERNALS

The parser vocabulary contains the following private definitions.
ptr +entry ( symbol -- addr) private
Access field to entry reference in a "symbol" structure.
ptr +next ( rule -- addr) private
Access field to next rule in syntax list in a "rule" structure.
ptr +primary ( symbol -- addr) private
Access field to primary function in a "symbol" structure.
ptr +rule ( rule -- addr) private
Access field to virtual parse machine code for a rule structure.
ptr +syntax ( symbol -- addr) private
Access field to syntax rule list in a symbol structure.
variable >semantics ( -- addr) private
Pointer to end of list of semantics in the vector "semantics".
: backtrack ( x y -- ) private
Backtracks the parser to the state given by the environment block on stack captured by "seize".
create interact-buffer ( -- addr) private
Internal buffer used for interaction top loop.
constant interact-buffer-size ( -- num) private
Size of internal buffer used for interaction top loop.
: primary ( symbol -- bool) private
Executes a symbols primary function. Returns the value from this function if available else "false".
: release ( rule x y -- ) private
Releases an environment block build by a "seize" call.
struct.type rule ( -- ) private
Structure definition of a syntax rule.
: rule ( rule -- bool) private
Executes the parser virtual machine code definition for a rule.
: seize ( rule -- rule x y rule) private
Captures the current state of the parser. This environment may be released or used to "backtrack" the parser.
create semantics ( -- addr) private
List of semantic actions. Collected during the parse and is returned by parse when it succeeds. The list is a compiled block of forth definitions.
constant semantics-size ( -- num) private
Size of list of semantics.
: syntax ( symbol -- bool) private
Given a symbol performs the basic top down parsing with the symbols syntax definition as goal. Returns "true" if the syntax parse succeeds else false.
create token ( -- addr) private
Internal buffer for tokens used by "entry" primary function.
constant token-size ( -- num) private
Size of internal buffer for token. Used by basic primary function "entry".
 

SEE ALSO

tile(1), forth(3X), internals(3X), compiler(3X), blocks(3X), structures(3X).  

NOTE

The function list is sorted in ASCII order. The type and mode of the entries are indicated together with their parameter stack effect.  

COPYING

Copyright (C) 1990 Mikael R.K. Patel

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the section entitled "GNU General Public License" is included exactly as in the original, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that the section entitled "GNU General Public License" may be included in a translation approved by the author instead of in the original English.  

AUTHOR

Mikael R.K. Patel
Computer Aided Design Laboratory (CADLAB)
Department of Computer and Information Science
Linkoping University
S-581 83 LINKOPING
SWEDEN
Email: mip@ida.liu.se

 

Index

NAME
SYNOPSIS
DESCRIPTION
INTERNALS
SEE ALSO
NOTE
COPYING
AUTHOR

This document was created by man2html, using the manual pages.
Time: 17:16:17 GMT, February 06, 2023